perm filename REMROM.FAI[CMS,LCS] blob
sn#291769 filedate 1977-07-04 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00009 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 .INSERT ASMBL.FAI
C00003 00003
C00006 00004
C00008 00005
C00010 00006
C00013 00007
C00015 00008
C00016 00009
C00018 ENDMK
C⊗;
.INSERT ASMBL.FAI
; RAM
PCL: 0 ;0
PCH: 1 ;1
PS: 2 ;2
A: 376 ;3
X: 176 ;4
Y: 377 ;5
SP: 377 ;6
ONMIA: 377 ;7
BEES: 377 ;10 OLD BEEHIVE STATUS
OBEEC: 377 ;11 DEFAULT BEEHIVE CONTROL WORD
BEEBR: 377 ;12
377 ;13
ADR: 377 ;14
377 ;15
VAL: 377 ;16
TFLG: 377 ;17
TMP: 377 ;20
377 ;21
111 ;22 ← FF MARK
; ODT RAM & INTERUPT VECTORS
LOC 1000
IRQA: REPEAT 3,{111↔} ;1000 - 1002
IRQB: REPEAT 2,{111↔} ;1003 - 1004
NMIA: REPEAT 3,{333↔} ;1005 - 1007
377 ;1010 ← FF MARK
; BIT RATE GEN CODES
; 0 = 0 10 = 9600
; 1 = 19.2K DON'T USE 11 = 4800
; 2 = 50 12 = 1800
; 3 = 75 13 = 1200
; 4 = 134.5 14 = 2400
; 5 = 200 15 = 300
; 6 = 600 16 = 150
; 7 = 2400 17 = 110
; EPROM STARTS HERE
LOC 176274 ;TOP 1K SHOULD BE 176000
; LOC 176000
BEEC ← 174100 ↔ BEED ← 174101 ;BEEHIVE CONTROL AND I/O ADDRESS
MODC ← 174120 ↔ MODD ← 174121 ;MODEM CONTROL AND I/O ADDRESS
BEEDEF←MODDEF←25 ;BEEHIVE AND MODEM CONTROL DEFAULTS
BBRDEF←MBRDEF←15 ;BIT RATE DEFAULTS 15=300 (FASTER FOR BEE?)
BBIT←20 ;BREAK BIT
; BREAK OPCODE CHECK
BRKCK: STAZ A ;SAVE A 2
PLA ;GET OLD PS 1
PHA ;RESTORE STACK 1
ANDI BBIT ; 2
BNE BRKIN ;AND CK FOR BRK 2
LDAZ A ; 2
JMPIN IRQB ;ELSE JUMP @IRQB 3
VINIT: JMP ODT ;INTERUPT JMP CODE 3
; RESET STARTS HERE
RSTA: LDAI BEEDEF ;SETUP BEE CONTROL 2
STAZ OBEEC ;WORD DEFAULT 2
LDAI BBRDEF ;SETUP BRATE DEFAULT 2
STAZ BEEBR ; 2
LDXI 2 ; 2
JLOOP: LDAX VINIT ;SETUP NMI INT VECT 3
STAX NMIA ; 3
DEX ; 1
BPL JLOOP ; 2
; JUMP TO HERE FOR DDT AND SAVE EVERYTHING
ODT: STAZ A ;SAVE A 2
BRKIN: LDA NMIA ; 3
STAZ ONMIA ;SAVE NMIA AND FORCE 2
LDAI RTI ;RETURN FROM INTERUPT 2
STA NMIA ;ON NMI 3
STXZ X ;SAVE X 2
STYZ Y ;SAVE Y 2
PLA ; 1
STAZ PS ;SAVE PS AND PC 2
PLA ; 1
STAZ PCL ; 2
STAZ ADR ;SETUP ADDRESS 2
PLA ; 1
STAZ PCH ; 2
STAZ ADR+1 ; 2
TSX ; 1
STXZ SP ;SAVE STACK PONITER 2
CLD ;FORCE BINARY 1
JSR SETBEE ;INIT BEEHIVE I/O 3
PLF: LDAI 12 ;PRINT LF 2
JSR PCHR ; 3
PCR: LDAI 15 ;PRINT CR 2
JSR PCHR ; 3
LDXI 0 ; 2
LDAIX ADR ;GET CONTENTS 2
STAZ VAL ; 2
JSR PAV ;PRINT ADDRESS/VAL 3
LDAI " " ;PRINT SPACE 2
JSR PCHR ; 3
STXZ TMP ;X IS 0 2
STXZ TMP+1 ; 2
STXZ TFLG ; 2
NXTCHR: JSR GCHR ;WAIT TILL CHR 3
ANDI 177 ;STRIP TOP BIT 2
JSR PCHR ;ECHO IT 3
CMPI "↑" ;CHECK THIS 2
BNE C1 ; 2
LDAZ ADR ;STEP BACK 2
BNE NOD ; 2
DECZ ADR+1 ; 2
NOD: DECZ ADR ; 2
JMP PLF ; 3
C1: CMPI 12 ;LF 2
BNE C2 ; 2
LDAZ TFLG ;STEP FORWARD 2
BEQ NODEP ; 2
LDAZ TMP ;DEPOSIT 2
STAIX ADR ; 2
NODEP: INCZ ADR ;STEP 2
BNE PCR ; 2
INCZ ADR+1 ; 2
JMP PCR ; 3
C2: CMPI "/" ; 2
BNE C3 ; 2
LDAZ TFLG ;CHECK FOR NEW ADDRESS 2
BEQ EROR ;NO ADDRESS 2
LDAZ TMP ;EXAMIN 2
STAZ ADR ; 2
LDAZ TMP+1 ; 2
STAZ ADR+1 ; 2
JMP PLF ; 3
C3: CMPI "G" ; 2
BNE C4 ; 2
LDAZ BBRDEF ;LEAVE DDT 2
STA BR0 ;DEFAULT BIT RATE 3
STA BR0 ; 3
LDAZ OBEEC ; 2
STA BEEC ;BEEHIVE CONTROL 3
LDXZ SP ;SETUP STACK 2
TXS ; 1
LDAZ PCH ; 2
PHA ; 1
LDAZ PCL ; 2
PHA ; 1
LDAZ PS ; 2
PHA ; 1
LDXZ X ; 2
LDYZ Y ; 2
LDAZ ONMIA ;FIX FIRST NMI BYTE 2
STA NMIA ; 3
LDAZ A ; 2
RTI ;START PROGRAM 1
C4: CMPI "T" ;CHECK FOR TTY MODE 2
BEQ TTY ; 2
CMPI "B" ;CHECK FOR BOOTSTRAP 2
BEQ BOOT ; 2
CMPI 60 ;CHECK FOR OCTAL NUM 2
BCC EROR ; 2
CMPI 70 ; 2
BCS EROR ;ERROR ON UNKNOWN 2
LDXI 3 ;NUMBER OF BITS 2
SLOOP: ASLZ TMP ;SHIFT TMP AND TMP+1 2
ROLZ TMP+1 ; 2
DEX ; 1
BNE SLOOP ; 2
ANDI 7 ; 2
ORAZ TMP ;STUFF IT AT BOTTOM 2
STAZ TMP ; 2
INCZ TFLG ;SET TMP FLAG 2
BNE NEXT ; 2
EROR: LDAI 7 ;↑G 2
JSR PCHR ;RING BELL 3
NEXT: JMP NXTCHR ; 3
; TTY MODE CHECK THIS OUT FIRST
TTY: JSR SETMOD ;INIT MODEM 3
JSR SETNMI ;SETUP INTERUPT VECTOR 3
TLOOP: LDA BEEC ;CKECK IF BEE TRANS 3
ANDI 2 ;REG IS EMPTY 2
BEQ NOB ; 2
LDA MODC ;CHECK MOD RECV 2
LSRA ;FOR CHR 1
BCC NOB ; 2
LDA MODD ;GET CHR FROM MODEM 3
STA BEED ;OUTPUT TO BEE 3
NOB: LDA MODC ;CHECK IF MOD TRANS 3
ANDI 2 ;REG IS EMPTY 1
BEQ TLOOP ; 2
LDA BEEC ;CK MOD RECV 3
LSRA ;FOR CHR 1
BCC TLOOP ; 2
LDA BEED ;GET CHR FROM BEE 3
STA MODD ;OUTPUT TO MODEM
JMP TLOOP ; 3
; BOOT STRAP
ESCHR ← 100 ↔ BOOTS ← 1010 ;? ESCHR ← 60?
BOOT: LDAI 10 ;SET ADDRESS AT 1010 2
STAZ ADR ; 2
LDAI 2 ; 2
STAZ ADR+1 ; 2
JSR SETMOD ;INIT MODEM ???? 3
JSR SETNMI ;INIT INTERUPT VECTOR 3
LDXI 0 ;CKECK THIS 2
LDAI ESCHR ;OUTPUT ESCHR TO 2
JSR WMOD ;INIT BOOTSTRAP 3
BOTLOP: LDYI 1 ; 2
HALF: JSR RMOD ;GET CHR 3
ANDI 177 ;??? 2
CMPI ESCHR ;CHECK IF DONE 2
BNE DONE ; 2
DEY ;CHECK IF FIRST 1
BNE NIBL ; 2
ANDI 17 ; 2
STAZ TFLG ;SAVE BOTTOM 2
JMP HALF ; 3
NIBL: ASLA ;SHIFT HALF WAY 1
ASLA ; 1
ASLA ; 1
ASLA ; 1
ORAZ TFLG ;ADD BOTTOM 2
STAIX ADR ;STORE @ADR 2
INCZ ADR ;ADR ← ADR + 1 2
BNE BOTLOP ;NEXT 2
INCZ ADR+1 ; 2
BNE BOTLOP ; 2
DONE: JMP BOOTS ;START WHEN DONE 3
; PRINT ADDRESS/VAL
PAV: LDXI 1 ;# OF CHRS 2
STXZ TFLG ;SET BIT MASK 2
LDYI 2 ;# OF BITS + C 2
JSR RLOOP ;PRINT 0 OR 1 3
LDXI 5 ; 2
LDAI 7 ; 2
STAZ TFLG ; 2
JSR CLOOP ;PRINT 5 NUMS, 0 - 7 3
LDAI "/" ; 2
JSR PCHR ;PRINT / 3
LDXI 1 ; 2
LDYI 3 ;BIT MASK AND 2
STYZ TFLG ;# OF BITS +1 2
JSR DLOOP ;PRINT 0 - 3 3
LDXI 2 ; 2
LDAI 7 ; 2
STAZ TFLG ; 2
JSR CLOOP ;PRINT 2 NUMS, 0 - 7 3
RTS ; 1
CLOOP: LDYI 3 ;FOR 3 BITS TO A NUM 2
RLOOP: ROLZ VAL ;ROTATE ADR VAL 2
ROLZ ADR ; 2
ROLZ ADR+1 ; 2
DLOOP: DEY ; 1
BNE RLOOP ; 2
LDAZ VAL ;GET NEXT NUMBER 2
ANDZ TFLG ; 2
ORAI 60 ;MAKE ASCII 2
JSR PCHR ;PRINT IT 3
DEX ; 1
BNE CLOOP ;NEXT NUM 3
RTS ; 1
; INPUT FROM BEEHIVE
GCHR: LDA BEEC ; 3
LSRA ;CHECK IF EMPTY 1
BCC GCHR ; 2
LDA BEED ;GET CHR 3
RTS ; 1
; OUTPUT TO BEEHIVE
PCHR: PHA ;SAVE CHR 1
WAIT: LDA BEEC ; 3
ANDI 2 ;CHECK IF FULL 2
BEQ WAIT ; 2
PLA ; 1
STA BEED ;PRINT IT 3
RTS ; 1
; INPUT FROM MODEM
RMOD: LDA MODC ; 3
LSRA ;CHECK IF EMPTY 1
BCC RMOD ; 2
LDA MODD ;GET CHR 3
RTS ; 1
; OUTPUT TO MODEM
WMOD: PHA ;SAVE CHR 1
FULL: LDA MODC ; 3
ANDI 2 ;CHECK IF FULL 2
BEQ FULL ; 2
PLA ; 1
STA MODD ;OUTPUT IT 3
RTS ; 1
; RESET BEEHIVE I/O
BR0 ← 174140 ↔ BR1 ← 174141 ;BEE BRATE IN/OUT ADDR
BR2 ← 174142 ↔ BR3 ← 174143 ;MOD BRATE IN/OUT ADDR
SETBEE: LDA BEEC ;SAVE OLD BEE STATUS 3
STAZ BEES ; 2
LDAZ BEEBR ;SETUP BEEHIVE BIT RATE 2
STA BR0 ;CHANELS 3
STA BR1 ; 3
LDAI 3 ;RESET ACIA 2
STA BEEC ; 3
LDAI BEEDEF ;SETUP DEFAULT BEE I/O 2
STA BEEC ; 3
RTS ; 1
; RESET MODEM I/O
SETMOD: LDAI MBRDEF ; 2
STA BR2 ;SETUP BRATE CHANELS 3
STA BR3 ; 3
LDAI 3 ;RESET ACIA 2
STA MODC ; 3
LDAI MODDEF ;SETUP DEFAULT MOD I/O 2
STA MODC ; 3
RTS ; 1
; SETUP NMI INTERUPT VECTOR JUMP
SETNMI: LDXI 7 ; 2
ILOOP: LDAX IVJ ;BLT IVJ TO NMIA 3
STAX NMIA ; 3
DEX ; 1
BPL ILOOP ; 2
RTS ; 1
IVJ: LDAI RTI ; 2
STA NMIA ;TURN OFF INT 3
JMP PLF ; 3
; ROM INTER VECTS
LOC 200265
; LOC 177772
0
NMIV: 5
2
RSTV: 20
374
IRQV: 0
2
; NMIV: ABSO NMIA ; 2
; RSTV: ABSO RSTA ; 2
; IRQV: ABSO IRQA ; _2_
; 6
END